package com.ouc.dcrms.core.rmq;

import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;

/**
 * @author WuPing
 * @version 2017年3月15日 下午10:29:02
 */

public class MsgTopicSend {
    
    private static final String EXCHANGE_NAME = "Topic_Logs";

    public static void main(String[] argv) {
	Connection connection = null;
	Channel channel = null;
	try {
	    ConnectionFactory factory = new ConnectionFactory();
	    factory.setHost("localhost");

	    connection = factory.newConnection();
	    channel = connection.createChannel();

	    channel.exchangeDeclare(EXCHANGE_NAME, "topic");

	    String routingKey = getRouting(argv);
	    String message = getMessage(argv);

	    channel.basicPublish(EXCHANGE_NAME, routingKey, null,
		    message.getBytes());
	    System.out.println(" [x] Send '" + routingKey + "':'" + message + "'");
	} catch (Exception e) {
	    e.printStackTrace();
	} finally {
	    if (connection != null) {
		try {
		    connection.close();
		} catch (Exception ignore) {
		}
	    }
	}
    }

    private static String getRouting(String[] strings) {
	if (strings.length < 1)
	    return "anonymous.info";
	return strings[0];
    }

    private static String getMessage(String[] strings) {
	if (strings.length < 2)
	    return "Hello World!";
	return joinStrings(strings, " ", 1);
    }

    private static String joinStrings(String[] strings, String delimiter,
	    int startIndex) {
	int length = strings.length;
	if (length == 0)
	    return "";
	if (length < startIndex)
	    return "";
	StringBuilder words = new StringBuilder(strings[startIndex]);
	for (int i = startIndex + 1; i < length; i++) {
	    words.append(delimiter).append(strings[i]);
	}
	return words.toString();
    }
}
